# -*- coding: utf-8 -*-
__author__ = 'lztkdr'
__date__ = '2020/3/30 14:12'

"""
		快速
		方便
		科学计算的基础库
	什么是numpy?
		一个在Python中做科学计算的基础库，重在数值计算，也是大部分python科学计算库的基础库，多用于在大型、多维数组上执行数值运算。

	axis = 0   行
	axis = 1   列

		
	求和：t.sum(axis=None)
	均值：t.mean(a,axis=None)  受离群点的影响较大
	中值：np.median(t,axis=None) 
	最大值：t.max(axis=None) 
	最小值：t.min(axis=None)
	极值：np.ptp(t,axis=None) 即最大值和最小值只差
	标准差：t.std(axis=None) 
		标准差是一组数据平均值分散程度的一种度量。一个较大的标准差，代表大部分数值和其平均值之间差异较大；一个较小的标准差，代表这些数值较接近平均值反映出数据的波动稳定情况，越大表示波动越大，约不稳定

	
	

"""

import numpy as np

import random

#使用numpy生成数组,得到ndarray的类型
t1 = np.array([1,2,3,])
print('t1:',t1) # [1 2 3]
print(type(t1)) # <class 'numpy.ndarray'>
print("*"*50)

t2 = np.array(range(10))
print('t2:',t2) # [0 1 2 3 4 5 6 7 8 9]
print(type(t2)) # <class 'numpy.ndarray'>
print("**************************************************")

t3 = np.arange(4,10,2)
print(t3) # [4 6 8]
print('t3:',type(t3)) #<class 'numpy.ndarray'>
print('t3:',t3.dtype) # int32
print("****************************************************************************************************")

#numpy中的数据类型
t4 = np.array(range(1,4),dtype="i1")
print(t4) # [1 2 3]
print(t4.dtype) #int8
print("**************************************************")

##numpy中的bool类型
t5 = np.array([1,1,0,1,0,0],dtype=bool)
print(t5)
print(t5.dtype)
print("****************************************************************************************************")


#调整数据类型
t6 = t5.astype("int8")
print(t6)
print(t6.dtype)

#numpy中的小数
t7 = np.array([random.random() for i in range(10)])
print(t7)
print(t7.dtype) # float64

t8 = np.round(t7,2) # 约等于，保留2位小数
print(t8)

print("****************************************************************************************************")

arr = np.arange(2,18,2)
arr2 = arr.reshape(4,2)  # 转为2维数组，4行2列
print(arr2)
# [[ 2  4]
# #  [ 6  8]
# #  [10 12]
# #  [14 16]]

# 任意维度数组，转换成 1维的数组
print(arr2.flatten()) # [ 2  4  6  8 10 12 14 16]

print("****************************************************************************************************")

# 广播的作用，每一个元素 都加2  （+-*/ 都一样）
arr3 = arr2 + 2
print(arr3)

print("**************************************************")

# np.nan 表示 非正常值
# np.inf 表示一个非常大无穷大的值，如：arr = np.arange(3)/0

# 两列数组，有其中一个维度是相同的，则可以进行 +-*%运算。

# int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替
# float16,float32,float64,float128  三种数据类型可以使用字符串 'f2','f4'或'f', 'f8'或'd','f16’或'g'
arr  = np.array(range(1,4),dtype="f2")
print(arr)

# 四色五入，保留2位
print(np.around(np.random.rand(3,4),2))
print("**************************************************")

#创建等差数列
arr = np.linspace(1,10,9)
print(arr)
print("**************************************************")
arr1 = arr.reshape((3,3))
print(arr1)

print("**************************************************")
# 其他知识点：
# https://blog.csdn.net/submarineas/article/details/85041240
